package JZ.JZ45;

/**
 * @author corn
 * @create 2020-10-24-19:43
 */

import java.util.*;

/**
 * JZ45 扑克牌顺子
 * 题目描述
 * LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...
 * 他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿！！
 * “红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小王可以看成任何数字,
 * 并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。
 * LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何，
 * <p>
 * A看作1,J为11,Q为12,K为13。
 * 如果牌能组成顺子就输出true，否则就输出false。为了方便起见,你可以认为大小王是0。
 * 解题思路：
 *  1、得出0的个数：num1
 *  2、得出非零数之间相差多少个数（可以用零补）：num2
 *  3、如果num1 >= num2 ，则为true，反之则为false
 */
public class Solution {
    public boolean isContinuous(int[] numbers) {
        //排除numbers的不合法性
        if(numbers == null || numbers.length == 0){
            return false;
        }
        //num1：numbers中0的个数
        int num1 = 0;
        //num2：numbers中非零数之间相差多少个数
        int num2 = 0;
        //将numbers中的非零数加入list中
        //并计算出number中0的个数
        List<Integer> list = new ArrayList<>();
        for (int number : numbers) {
            if (number == 0) {
                num1++;
            } else {
                list.add(number);
            }
        }
        //将list从小到大进行排序
        Collections.sort(list);
        //计算非零数之间相差多少个数，即num2
        for (int i = 0; i < list.size() -1; i++) {
            if(list.get(i).equals(list.get(i + 1))){
                return false;
            }
            if (list.get(i) != list.get(i + 1) - 1) {
                num2 += list.get(i + 1) - list.get(i) - 1;
            }
        }
        return num1 >= num2;
    }
}
